﻿using System;
using System.Collections.Generic;
using System.Text;
using CapaDatos;
using CapaNegocio;
using System.Collections;

namespace CapaNegocio
{
    public class Presupuesto:IBaseDeDatos
    {
        #region atributos
        private int id;
        private DateTime fechaEstado;
        private double precioM2;
        private String nombre;
        private String apellido;
        private String direccion;
        private String localidad;
        private String telefono;
        private String mail;
        private double precioRes;
        private Estado estado;
        private Revestimiento revestimiento;
        private Piscina piscina;
        private List<AccesorioPresupuesto> accesorios;
        private List<TerminacionPresupuesto> terminaciones;
        private List<CategoriaPresupuesto> categorias; 
        #endregion

        #region getters y setters
       
        public int Id
        {
            get { return id; }
            set { id = value; }
        }

        public DateTime FechaEstado
        {
            get { return fechaEstado; }
            set { fechaEstado = value; }
        }

        public double PrecioM2
        {
            get { return precioM2; }
            set { precioM2 = value; }
        }

        public String Mail
        {
            get { return mail; }
            set { mail = value; }
        }

        public String Nombre
        {
            get { return nombre; }
            set { nombre = value; }
        }
        public String Apellido
        {
            get { return apellido; }
            set { apellido = value; }
        }

        public String Direccion
        {
            get { return direccion; }
            set { direccion = value; }
        }

        public String Localidad
        {
            get { return localidad; }
            set { localidad = value; }
        }

        public String Telefono
        {
            get { return telefono; }
            set { telefono = value; }
        }

        public double PrecioRes
        {
            get { return precioRes; }
            set { precioRes = value; }
        }

        public Piscina Piscina
        {
            get { return piscina; }
            set { piscina = value; }
        }

        public Estado Estado
        {
            get { return estado; }
            set { estado = value; }
        }

        public Revestimiento Revestimiento
        {
            get { return revestimiento; }
            set { revestimiento = value; }
        }

        public List<AccesorioPresupuesto> Accesorios
        {
            get { return accesorios; }
            set { accesorios = value; }
        }
        public List<TerminacionPresupuesto> Terminaciones
        {
            get { return terminaciones; }
            set { terminaciones = value; }
        }
        public List<CategoriaPresupuesto> Categorias
        {
            get { return categorias; }
            set { categorias = value; }
        }

        #endregion

        #region clientes
        public Presupuesto()
        {
            id=0;
            fechaEstado=new DateTime();
            precioM2=0;
            nombre="";
            apellido="";
            direccion="";
            localidad="";
            telefono = "";
            mail = "";
            precioRes=0;
            estado=new Estado();
            revestimiento=new Revestimiento();
            piscina= new Piscina();
        }
        #endregion

        #region metodos estaticos
        public static long crear(ArrayList datos)
        {
            return ServidorDatos.registrarPresupuesto(datos);
        }
        public static Presupuesto buscarPresupuesto(long pNroPresup)
        {
            ArrayList presupuesto = ServidorDatos.buscarPresupuesto(pNroPresup);
            if (presupuesto.Count == 1)
            {
                Presupuesto p = new Presupuesto();
                p.buildObject((ArrayList)presupuesto[0]);
                return p;
            }
            else {
                return null;
            }  
        }
        public static List<Presupuesto> buscarPresupuestos()
        {
           ArrayList presupuestosBD= ServidorDatos.buscarPresupuestos();
           List<Presupuesto> pre = new List<Presupuesto>();
           for (int i = 0; i < presupuestosBD.Count; i++)
           {
                Presupuesto p = new Presupuesto();
                p.buildObject((ArrayList)presupuestosBD[i]);
                pre.Add(p);
            }
            return pre;
        }
        #endregion

        #region metodos de instancia
        public bool cambiarEstado(int estado) {
          return  ServidorDatos.cambiarEstado(estado,this.Id);
        }

        public bool eliminar()
        {

            if (OrdenTrabajo.buscarPresupuesto(this) == null)
            {
                return ServidorDatos.eliminarPresupuesto(this.Id);
            }
            else
                return false;
        }

        public bool actualizar(ArrayList datos)
        {

            if (OrdenTrabajo.buscarPresupuesto(this) == null)
            {

                return ServidorDatos.actualizarPresupuesto(datos, this.Id, Piscina.Id);
            }
            else {

                return false;
            }
        }

        public string figuracionCliente()
        {
            return nombre+", "+apellido;
        }

        #endregion 

        #region IBaseDeDatos Members


        public void buildObject(ArrayList lista){
            id = Convert.ToInt32(lista[0].ToString());
            estado = Estado.buscarEstado(Convert.ToInt32(lista[1].ToString()));
            revestimiento = Revestimiento.buscarRevestimiento(Convert.ToInt32(lista[2].ToString()));
            precioRes = Convert.ToDouble(lista[3].ToString());
            piscina = Piscina.buscarPiscina(Convert.ToInt32(lista[4].ToString()));
            fechaEstado = Convert.ToDateTime(lista[5].ToString());
            apellido = lista[6].ToString();
            direccion = lista[7].ToString();
            mail = lista[8].ToString();
            nombre = lista[9].ToString();
            localidad = lista[10].ToString();
            telefono = lista[11].ToString();
            precioM2 = Convert.ToDouble(lista[12].ToString());
            accesorios = AccesorioPresupuesto.buscarAccesorios(id);
            terminaciones = TerminacionPresupuesto.buscarTerminaciones(id);
            categorias = CategoriaPresupuesto.buscarCategorias(id);
        }

        #endregion

    }
}
